package net.sisgac.despacho_mercaderia.service;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;

import java.util.List;

import net.sisgac.atencion_cliente.model.Mercaderia;
import net.sisgac.atencion_cliente.model.SolicitudServicio;
import net.sisgac.cliente.model.Cliente;
import net.sisgac.despacho_mercaderia.model.dao.GuiaRemisionDAO;
import net.sisgac.despacho_mercaderia.model.dao.OrdenServicioDAO;
import net.sisgac.despacho_mercaderia.model.dao.TransportistaDAO;
import net.sisgac.despacho_mercaderia.model.DetalleOrden;
import net.sisgac.despacho_mercaderia.model.GuiaRemision;
import net.sisgac.despacho_mercaderia.model.OrdenServicio;
import net.sisgac.despacho_mercaderia.model.TipoMercaderia;
import net.sisgac.despacho_mercaderia.model.Transportista;
import net.sisgac.despacho_mercaderia.model.dao.jpa.JPAGuiaRemisionDAO;
import net.sisgac.despacho_mercaderia.model.dao.jpa.JPAOrdenServicioDAO;
import net.sisgac.despacho_mercaderia.model.dao.jpa.JPATransportistaDAO;
import javax.persistence.*;
import org.apache.commons.lang.StringUtils;
import net.sisgac.util.Utilitario;
import net.sisgac.despacho_mercaderia.model.dao.TransportistaDAO;

/**
 * 
 * @author Luis Yarleque
 *
 */
public class DespachoMercaderiaServiceImpl implements DespachoMercaderiaService {
	private final String UNIDAD_DE_PERSISTENCIA ="jpaPersistence";
	private EntityManager em;
	private EntityManagerFactory fabrica;
	private GuiaRemisionDAO guiaRemisionDAO;
	private OrdenServicioDAO ordenServicioDAO;
	private TransportistaDAO transportistaDAO;
	SolicitudServicio solicitudServicio;
	
	public DespachoMercaderiaServiceImpl(){
		 em =	this.getEntityManager();
		guiaRemisionDAO = new JPAGuiaRemisionDAO(em);
		ordenServicioDAO = new JPAOrdenServicioDAO(em);
		transportistaDAO = new JPATransportistaDAO(em);
	}
	
	public EntityManager getEntityManager(){
	@Override
	public Transportista buscarTransportista(int cod) {
		Transportista transportista= transportistaDAO.findbyId(cod);
		if(transportista==null)
			throw new RuntimeException("Transportista no existente");
		return transportista;
	}

	@Override
	public void registrarGuiaRemision(GuiaRemision o) {
		EntityTransaction tx= em.getTransaction();
		try{
			tx.begin();
			guiaRemisionDAO.insertarGR(o);
			tx.commit();
		}catch(Exception ex){
			tx.rollback();
			throw new RuntimeException(ex);
		}
	}

	@Override
	public OrdenServicio buscarOS(int cod) {
		OrdenServicio ordenesServicio= ordenServicioDAO.findBlyId(cod);
		if(ordenesServicio==null)
			throw new RuntimeException("Orden de Servicio no existente");
		return ordenesServicio;
	}

	@Override
	public Cliente buscarCliente(String cliente) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public void actualizar(Mercaderia mercaderia) {
		// TODO Auto-generated method stub
		
	}

	
	@Override
	public String grabarOrdenServicio(OrdenServicio o) {
		// TODO Auto-generated method stub
		EntityTransaction tx = em.getTransaction();
		
	o.setOrigenordens(solicitudServicio.getOrigenSolicitudS());
	o.setEstadoordens("generado");
	/*o.setSubtotalordens();
	o.setTotalordens();
	o.setCantidadmercaderia(cantidadmercaderia);*/
	
		return null;
	}

	@Override
	public String grabarDetalleOrden(DetalleOrden det) {
		// TODO Auto-generated method stub
		EntityTransaction tx = em.getTransaction();
		
		
		
		
		return null;
	}



	@Override
	public String actualizarDetalleOrden(OrdenServicio o) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public List<Mercaderia> listarMercaderia(int id) {
		// TODO Auto-generated method stub
		return null;
	}




}
